package guia1;

public class PuntoNatural 
{
	NumeroNatural x;
	NumeroNatural y;
	/*
	    Constructor sin argumentos.
	*/
	public PuntoNatural() 
	{
	    x = new NumeroNatural();
	    y = new NumeroNatural();
	}

	/*
	   Constructor con dos argumentos del tipo NumeroNatural. Inicializa
	   los valores de atributos con los argumentos dados.
	*/
	public PuntoNatural(NumeroNatural xIn, NumeroNatural yIn) 
	{
          x = xIn;
          y = yIn;
    }

	/*
	   Constructor con un argumento del tipo PuntoNatural. Inicializa la
	   instancia utilizando las coordenadas del punto argumento.
	*/
	public PuntoNatural(PuntoNatural otroPunto) 
	{
		x = otroPunto.getX();
		y = otroPunto.getY();
	}

	/*
	   Método que retorna la instancia de numero natural que representa
	   la coordenada x del punto receptor del mensaje
	*/
	public NumeroNatural getX() 
	{
		return x;
	}

	/*
	   Método que retorna la instancia de numero natural que representa
	   la coordenada y del punto receptor del mensaje
	*/
	public NumeroNatural getY() 
	{
		return y;
	}

	/*
    Método que retorna una cadena con el formato (valorX,valorY).
    Por ejemplo:(3,4)
	*/
	public String toString()
	{
	  return "(" + x.getValor() + "," + y.getValor() + ")";
	}


	/*
	    Este método retorna true si el argumento es instancia de la
	    clase PuntoNatural y además contiene los mismos valores de
	    coordenada.
	 */
	 public boolean equals(Object otroPunto)
	 {
	    if(otroPunto instanceof PuntoNatural) 
	    {
	      PuntoNatural p = (PuntoNatural)otroPunto;
	         return (x.equals(p.getX())) && (y.equals(p.getY()));
	    }
	    else
	       return false;
	 }

	 /*
	 Retorna una nueva instancia de PuntoNatural que resulta de la suma del receptor del
	 mensaje y el argumento dado: otroPunto.
	 */
	 public PuntoNatural suma(PuntoNatural otroPunto) {
		 return new PuntoNatural(x.suma(otroPunto.getX()), y.suma(otroPunto.getY()));
	 }

	 /*
	    Retorna una nueva instancia de PuntoNatural que resulta de la diferencia del
		receptor del mensaje y el argumento dado: otroPunto. Deberá considerar que esta
		operación no podrá ser realizada para ciertas situaciones, de ser así, este método
		retornará null.
	 */
	 public PuntoNatural diferencia(PuntoNatural otroPunto) {
		 NumeroNatural xIn = x.diferencia(otroPunto.getX());
		 NumeroNatural yIn = y.diferencia(otroPunto.getY());
		 if (xIn!=null && yIn!=null) 
			 return new PuntoNatural(xIn,yIn);
		 else
			 return null;
		 
	 }

	 
}
